Skip to content

aosでチャットルームを構築する

INFO

もし、ao 内でチャットルームを作成する方法を学びたいと思っているなら、メッセージの送受信に関する基本的な手法を少なくとも理解していることを意味します。まだ理解していない場合は、先に メッセージング のチュートリアルを確認することをお勧めします。

このチュートリアルでは、Luaスクリプト言語を使用して ao 内にチャットルームを構築します。このチャットルームには、次の2つの主要な機能が備わっています:

  1. 登録: プロセスがチャットルームに参加できるようにする機能。
  2. ブロードキャスト: 1つのプロセスからすべての登録済み参加者にメッセージを送信する機能。

では、チャットルームの基盤を設定するところから始めましょう。

Video Tutorial

ステップ1: 基礎

  • 好きなコードエディタを開きます(例:VS Code)。

INFO

Luaスクリプトの体験を向上させるために、コードエディタに推奨拡張機能 をインストールしておくと便利です。

  • Create a new file named chatroom.lua.

  • chatroom.luaという新しいファイルを作成します。

    チャットルームLuaファイル

Step 2: Creating The Member List

  • In chatroom.lua, you'll begin by initializing a list to track participants:

    lua
    Members = Members or {}

    Chatroom Lua File - Naming the Member List

    • Save the chatroom.lua file

ステップ3: チャットルームをaosに読み込む

chatroom.luaを保存したら、次にチャットルームをaosに読み込みます。

  • まだ開始していない場合は、chatroom.luaが保存されているディレクトリ内でターミナルからaosを起動します。

  • aosのCLIで、以下のスクリプトを入力して、あなたのスクリプトをaosプロセスに組み込みます:

    lua
    .load chatroom.lua

    Loading the Chatroom into aos

    上記のスクリーンショットに示されているように、レスポンスとしてundefinedを受け取ることがあります。これは予想される動作ですが、ファイルが正しく読み込まれたことを確認したいです。

    INFO

    aosのLua Eval環境では、明示的に値を返さないコードを実行すると、undefinedが標準的なレスポンスとして返されます。これは、結果が返されなかったことを示しています。リソースを読み込んだり、操作を実行したりする際に観察できます。例えば、X = 1を実行すると、returnステートメントが含まれていないため、undefinedが返されます。

    しかし、X = 1; return Xを実行すると、環境は値1を返します。この挙動は、このフレームワーク内で作業する際に理解することが重要です。なぜなら、状態を変更するためのコマンドを実行することと、直接的な出力を生成することを目的としたコマンドとの違いを明確にする助けになるからです。

  • aosMembers、またはユーザーリストに付けた名前を入力します。空の配列{ }が返されるはずです。

    メンバーリストの確認

    空の配列が表示されれば、スクリプトはaosに正常に読み込まれています。

ステップ4: チャットルーム機能の作成

The Registration Handler

Registration Handler は、プロセスがチャットルームに参加できるようにします。

  1. 登録ハンドラの追加: chatroom.luaを修正し、以下のコードを使用してMembersに登録するためのハンドラを含めます:
lua

-- Modify `chatroom.lua` to include a handler for `Members`
-- to register to the chatroom with the following code:

  Handlers.add(
    "Register",
    { Action = "Register"},
    function (msg)
      table.insert(Members, msg.From)
      print(msg.From .. " Registered")
      msg.reply({ Data = "Registered." })
    end
  )

Register Handler

このハンドラは、Action = "Register"というタグに応じてプロセスがチャットルームに登録できるようにします。登録が成功すると、registeredというメッセージが表示されて確認されます。

  1. 再読み込みとテスト: スクリプトを再読み込みして、自分自身をチャットルームに登録してテストしましょう。

    • .load chatroom.luaを使用して、aosでスクリプトを保存し再読み込みます。
    • 次のスクリプトを使用して、登録ハンドラが読み込まれたか確認します:
lua
 Handlers.list

Checking the Handlers List

これにより、チャットルーム内のすべてのハンドラのリストが返されます。これはおそらくあなたがaosで開発する初めての経験であるため、Registerという名前の1つのハンドラだけが表示されるはずです。

  • 自分自身をチャットルームに登録することで、登録プロセスをテストしてみましょう:
lua
Send({ Target = ao.id, Action = "Register" })

成功した場合、あなたのアウトボックスにメッセージが追加されましたというメッセージが表示され、その後にregisteredという新しい印刷メッセージが表示されるはずです。

Registering to the Chatroom

  • 最後に、Membersリストに成功裏に追加されたかどうかを確認しましょう:
lua
 Members

成功した場合、MembersリストにあなたのプロセスIDが表示されるはずです。 Checking the Members List

Adding a Broadcast Handler

チャットルームができたので、チャットルームのすべてのメンバーにメッセージをブロードキャストできるハンドラを作成しましょう。

  • 次のハンドラをchatroom.luaファイルに追加します:

    lua
      Handlers.add(
        "Broadcast",
        { Action = "Broadcast" },
        function (msg)
          for _, recipient in ipairs(Members) do
            ao.send({Target = recipient, Data = msg.Data})
          end
          msg.reply({Data = "Broadcasted." })
        end
      )

    このハンドラは、チャットルームのすべてのメンバーにメッセージをブロードキャストできるようにします。

  • .load chatroom.luaを使用して、aosでスクリプトを保存し再読み込みします。

  • チャットルームにメッセージを送信して、ブロードキャストハンドラをテストしてみましょう:

lua
Send({Target = ao.id, Action = "Broadcast", Data = "Broadcasting My 1st Message" }).receive().Data

ステップ5: モーフィアスをチャットルームに招待する

チャットルームに自分自身を成功裏に登録したので、モーフィアスを招待して参加してもらいましょう。これを行うために、彼がチャットルームに登録できるようにする招待状を送ります。

モーフィアスは、自動エージェントで、Action = "Join"というタグに応じて反応するハンドラを持っています。これにより、彼はあなたのRegisterタグを使用してチャットルームに登録します。

  • モーフィアスにチャットルームに参加するための招待状を送りましょう:
lua
Send({ Target = Morpheus, Action = "Join" })
  • To confirm that Morpheus has joined the chatroom, check the Members list:

    lua
    Members

    If successful, you'll receive a broadcasted message from Morpheus.

ステップ6: トリニティをチャットルームに招待する

このメッセージの中で、彼はトリニティのプロセスIDを教え、彼女をチャットルームに招待するように指示します。

モーフィアスと同様に、彼女のプロセスIDをTrinityとして保存し、チャットルームに招待します。

彼女が成功裏にチャットルームに参加すれば、次の課題としてトークンの作成を提案してきます。

チャットルームへの他者の参加

他者のオンボーディング

  • aosユーザーを招待する: 他のaosユーザーをあなたのチャットルームに参加するよう促します。彼らは登録し、ブロードキャストに参加できます。

  • オンボーディング手順を提供する: 簡単にオンボーディングできるよう、彼らにシンプルなスクリプトを共有してください:

lua
-- Hey, let's chat on aos! Join my chatroom by sending this command in your aos environment:
Send({ Target = [Your Process ID], Action = "Register" })
-- Then, you can broadcast messages using:
Send({Target = [Your Process ID], Action = "Broadcast", Data = "Your Message" })

次のステップ

おめでとうございます!あなたはaoでチャットルームを成功裏に構築し、モーフィアスを招待しました。また、チャットルームのすべてのメンバーにメッセージを送信するためのブロードキャストハンドラも作成しました。

次に、モーフィアスとの対話を続けますが、今回はトリニティを会話に加えます。彼女が次の一連の課題へと導いてくれるでしょう。頑張ってください!